package com.whcoding.designpatterns.pattern.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @program: spring-boot-learning
 * @description: 动态处理器
 * @author: whcoding
 * @create: 2022-09-21 09:57
 **/
public class ProxyFactory {

	/**
	 * 目标对象
	 */
	private Object target;

	public ProxyFactory(Object target) {
		this.target = target;
	}

	/**
	 * 生成动态代理
	 *
	 * @return
	 */
	public Object getProxyInstance() {
		return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),
				new InvocationHandler() {
					@Override
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						System.out.println("JDK动态代理开始前的方法。。。。");
						// 通过反射机制调用目标对象的方法
						Object invoke = method.invoke(target, args);
						System.out.println("JDK动态代理结束后的方法。。。。");
						return invoke;
					}
				});
	}

}
